home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #250 (1993)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #250 (1993)(Rhein-Sieg-Soft).adf
/
Z80
/
z80.Anleitung
< prev
next >
Wrap
Text File
|
1993-08-10
|
28KB
|
949 lines
18.4.1993
Z80 Crossassembler V1.0
Copyright Jürgen Eder
Hermann-Hesse-Weg 7
W-7316 Köngen
(neue Postleitzahl: 73257 Köngen)
Auf dieser Diskette befindet sich nur eine DEMO-Version.
Das heißt: Es können nur Z80-Programme mit max.
50 Quellcode-Zeilen assembliert werden, alle
anderen Funktionen sind in keinster Weise
beeinträchtigt. Sie können also den Crossassembler
vor dem Kauf zunächst testen.
Wenn Sie die Vollversion möchten, schicken Sie
bitte 30.- DM (z.B. per Verrechnungsscheck)
an obige Adresse. Sie bekommen dann umgehend:
- Die aktuelle Vollversion
- Die ausgedruckte Anleitung
(Rücksendeadresse bitte nicht vergessen !!!)
Anleitung:
1.0 Hard- und Softwareanforderung:
Hardwareanforderung:
512 k RAM,
Diskettenlaufwerk
Softwareanforderung:
Amiga-OS 2.04
ASCII-Editor
Bemerkung:
Der Assembler sollte auch unter Amiga-OS 1.2 und
1.3 funktionieren, wenn er im CLI aufgerufen wird.
(siehe "Aufruf des Assemblers")
1.1 Installation:
Zur Installation klicken Sie das Verzeichnis Z80 an und
schieben es dorthin, wo Sie es haben wollen. (Drag- und
Drop-Prinzip). Wenn Sie das Icon über dem Ziel wieder los-
lassen, wird der Assembler kopiert.
(Anmerkung: Siehe auch Anleitung zum Amiga: "Kopieren von
Verzeichnissen")
Selbstverständlich kann auch die Originaldiskette bzw. die
Sicherheitskopie zum Arbeiten verwendet werden.
Bei Installation auf eine Diskette, ist es am besten, wenn
Sie sich die Workbench-Diskette zuerst kopieren und dann
nicht benötigte Dateien von dieser Diskette löschen (z.B.
Zeichensätze...) um Platz zu schaffen. Dann braucht nur
noch das Verzeichnis Z80 auf diese 'Arbeitsdiskette' ko-
piert werden. (Vorgehen siehe oben)
1.2 Aufruf des Assemblers
1.2.1 Aufruf aus dem CLI
Der Assembler wird durch Angabe des Programmnamens
"Z80Ass" und der Parameter aufgerufen.
Folgende Syntax muß dabei eingehalten werden:
Z80Ass [-behl?] Quellendateiname
Die Angaben in der rechteckigen Klammer müssen nur mit an
gegeben werden, wenn eine Ausgabe erwünscht wird. Fehlen
diese Angaben erfolgt keine Ausgabe. Es wird dann zwar der
Assembler gestartet und die Quellendatei geladen aber der
Quelltext wird nur auf Fehler überprüft und gegebenenfalls
wird eine Fehlerdatei erzeugt. Fehlt auch die Angabe
"Quellendateiname" so wird automatisch versucht ein Window
auf der Workbench zu öffnen. Das weitere Vorgehen ist dann
wie beim Aufruf von der Workbench.
Das Ausgabeformat kann durch setzen verschiedener
'Schalter' angegeben werden. (Das Minuszeichen muß dann
ebenfalls eingegeben werden!)
Erklärung der Schalter:
- ?
Beschreibung aller möglichen Flags des Assemblers beim
Aufruf.
- b
Es wird eine Binärdatei generiert. Diese Datei enthält den
Maschinencode Ihres Programms. Der Dateiname ist derselbe
wie der Name des Quellcodes, nur mit der Erweiterung
".bin".
- e
Es wird eine Epromdatei generiert. Diese Datei enthält den
Maschinencode Ihres Programms und kann dann mit einem
EPROM-Programmiergerät weiterverarbeitet werden. Der Da-
teiname ist derselbe wie der Name des Quellcodes, nur mit
der Erweiterung ".epr".
- h
Es wird eine Hexdatei generiert. Der Dateiname ist der
selbe wie der Name des Quellcodes, nur mit der Erweiterung
".hex". Diese Datei enthält Ihr eingebenes Programm eben
falls als Maschinencode. Aber der Aufbau ist anders als
bei einer Binärdatei. Der Maschinencode ist hier erstens
Hexadezimal im ASCII Code abgespeichert, und zweitens
steht am Anfang jeder Zeile die 16-Bit Adresse, an der die
Daten dann nachher stehen sollen.
- l
Es wird ein Listing generiert. Der Dateiname ist derselbe
wie der Name des Quellcodes, nur mit der Erweiterung
".lst". Außerdem wird noch eine Symboltabelle generiert
mit der Erweiterung ".sym".
Bemerkung:
Der Aufruf aus einer Shell (CLI) funktioniert auch unter
Betriebssystemen kleiner als 2.04 solange nicht versucht
wird das Window zu öffnen. Das heißt: der Aufruf des As-
semblers ohne jegliche Parameter funktioniert erst ab
OS-2.04.
Beispiel:
Z80Ass -lb Z80Test.asm
Assembliert die Quellendatei "Z80Test.asm" und erzeugt ein
Listing, eine Symboltabelle und eine Binärdatei.
Z80Ass ? oder Z80Ass -? Test.asm
Es wird eine kurze Erklärung zur Aufrufkonvention des As-
sembler ausgegeben. Der Assemblerlauf wird nicht gestar-
tet!
Z80Ass
Ab Amiga-OS 2.04 wird ein Window geöffnet, in dem Sie dann
alle Eingaben komfortabel mit der Maus erledigen können.
1.2.2 Aufruf von der Workbench (ab Amiga-OS 2.04)
Das Programm wird mit einem Doppelklick auf das Icon ge-
startet und öffnet dann ein Window in dem alle notwendigen
Einstellungen ganz einfach und komfortabel durch Anklicken
der entsprechenden "Schalter" ein- und ausgeschaltet wer-
den können. Sie entsprechen den Schaltern, die auch beim
Aufruf aus dem CLI mit angegeben werden können und sind im
Abschnitt 1.2.1 bereits erklärt worden.
Durch den Menüpunkt "Projekt->Laden" kann die Quellendatei
einfach durch Anklicken ausgewählt werden. Gestartet wird
der Assembler dann durch Anklicken von "Start".
1.3 Zeilensyntax und Eingabeformat
Die Quellendatei ist eine normale Textdatei, die mit jedem
beliebigen Texteditor erzeugt werden kann. Die einzige Be-
dingung ist, das der Editor die Ausgabedatei im ASCII-Code
schreiben kann. (z.B.: Ed, der mit Amiga-OS 2.04 mitgelie-
fert wird)
Es wird die offizielle Z80-Mnemonik-Schreibweise unter
stützt. Um die Assemblerbefehle des Z80 zu erlernen ver-
wenden Sie bitte anderweitige Literatur zum Z80 bzw. sehen
Sie sich das Programm "Z80-Hilfe" an. In diesem Programm
werden alle Befehle des Z80 kurz erklärt.
Aufbau einer typischen Assemblerzeile:
[Label[:]] Z80-Befehl [Parameter1,Paramter2] [;Kommentar]
Beispiel:
Loop: LD A,B ;eine Beispielzeile
Bemerkungen:
- Die Zeilenlänge darf in der Version 1.0 die Länge von
255 Zeichen NICHT überschreiten !
- Bei Befehle mit ZWEI Parameter dürfen zwischen den
Parametern KEINE Leerzeichen stehen!
- Der Z80 kennt auch ein Register AF` (gesprochen: AF
gestrichen). Das '`' befindet sich auf den deutschen
Tastaturen über der Tabulator-Taste.
1.4 Ausdrücke
1.4.1 Symbolsyntax
Ein Label beginnt mit einem Buchstabe oder einem Unter
strich, die weitere Zeichenfolge ist dann beliebig. Ein
Label kann beliebig lang sein, alle Zeichen sind dabei si-
gnifikant zur Unterscheidung. Die Groß- und Kleinschrei-
bung ist dabei gleichwertig. d.h.: Loop oder loOP bezeich-
nen dieselbe Variable.
Bemerkung:
Variable dürfen nicht nach Z80-Befehle, oder den Direkti-
ven benannt werden. Außerdem wird eine Variable Namens
"PC" als Synonym für den "Programmcounter" verwendet. Der
Zähler hat als aktuellen Wert immer den Counterinhalt, der
am Beginn der aktuellen Zeile gültig war. Das gilt auch
für die Direktiven. Insbesondere bei DB- und DW-Direktiven
wird der Counter innerhalb einer Zeile nicht weiterge-
zählt, sondern er hat konstant den Wert, den er am Anfang
dieser Zeile hatte!
1.4.2 Rechenregeln
Wenn z.B. Zahlen als Parameter verwendet werden, kann
durch Anhängen eines Buchstabens das Zahlensystem angege-
ben werden. Fehlt diese Angabe, wird das Dezimalsystem
vorausgesetzt.
Folgende Systeme können definiert werden:
D oder kein Buchstabe : Dezimalzahl
O : Oktalzahl
H : Hexadezimalzahl
B : Dualzahl
Beispiel:
4dh ist eine Hexadezimalzahl, 10 oder 10d ist eine Dezi-
malzahl, 10011b ist eine Dualzahl usw..
Weiterhin kann ein String als Folge von ASCII-Codes nach
z.B. DB-Direktiven in doppelten Hochkommas angegeben wer-
den. z.B. DB "Das ist ein String" ist eine gültige Zeile.
Der Inhalt wird in die entsprechenden ASCII-Codes umgewan-
delt. Außerdem kann statt einer Zahl auch EIN Zeichen in
einfachen Hochkommas verwendet werden. (auf deutschen Ta-
staturen ALT + ä) Der ASCII-Code dieses Zeichen wird dann
behandelt wie eine Zahl. Man kann damit auch rechnen.
Also 'a'+3*'j' ist ebenfalls ein gültiger Ausdruck.
Bemerkung:
Als Zahlen werden nur Zeichenketten erkannt, die auch mit
einer Ziffer beginnen. Wenn also z.B. eine Hexadezimale
Zahl F0H irgendwo in Ihrem Quellcode auftaucht, wird sie
als Variable interpretiert, da das erste Zeichen ein Buch-
stabe ist. In solchen Fällen muß eine "0" (Null) vorange-
stellt werden. Hier in diesem Beispiel muß es dann also
heißen: 0F0H.
Der Assembler versteht die Grundrechenarten: Addition,
Subtraktion, Multiplikation und Division außerdem weitere
mathematische und logische Ausdrücke (siehe unten). Eine
Formel wird nach Priorität ausgewertet, also die normale
Punkt vor Strich Regelung. Durch Klammerung kann diese Re-
gelung umgangen werden. Da aber eine normale runde Klammer
'(' bzw. ')' bei manchen Befehlen für die indirekte Adres-
sierungsart verwendet wird, sollte statt dessen in diesen
Fällen die eckige Klammer verwendet werden, also '[' bzw.
']'. Um die Lesbarkeit eines Programmes zu erhöhen kann
aber auch die eckige Klammer grundsätzlich immer verwendet
werden. Der Assembler versteht beides.
Beispiel:
ld A,4*[3+2] oder
ld B,'F'+3*2 usw.
Hier die Auflistung aller mathematischen Ausdrücke, die
der Assembler versteht. Sie ist nach der Priorität der
einzelnen Operatoren sortiert. Die höchste Priorität hat
der erste Operator in der Liste (Vorzeichen Plus). Die
niedrigste Priorität hat der letzte Operator (Addition).
Operator Bedeutung
+ Vorzeichen: Plus
- Vorzeichen: Minus
~ Bitweises Negat
< Low-Byte eines 16-Bit-Wertes
(als Ergebnis bekommt man einen 8 Bit Wert)
> High-Byte eines 16-Bit-Wertes
(als Ergebnis bekommt man einen 8 Bit Wert)
& Bitweises UND
| Bitweises ODER
^ Potenzieren
/ Division
* Multiplikation
- Subtraktion
+ Addition
Bemerkung:
Leerzeichen innerhalb eines Ausdrucks sind verboten und
führen zu einem falschen Ergebnis. Es wird jedoch nicht
immer eine Fehlermeldung erzeugt!
1.5 Die Direktiven
1.5.1 Steuerungsdirektiven
END
Beendet den Assemblerlauf. Diese Direktive ist optional
und muß nicht unbedingt angegeben werden.
INCLUDE "Dateiname"
Der Assembler unterbricht die Assemblierung der aktuellen
Quelldatei und schiebt das Includefile "Dateiname" in den
Assemblerlauf ein. Wenn diese neue Datei zu Ende ist, wird
im alten Quellfile fortgefahren.
SETLH
Die DW-Direktive (siehe unten) generiert 16-Bit Werte. Die
Anordnung der zwei Bytes, also ob z.B. zuerst Low-Byte und
dann das High-Byte generiert wird, wird durch SETLH bzw.
SETHL eingestellt. SETLH sorgt nun dafür, das zuerst das
Low-Byte und dann das High-Byte generiert wird.
SETHL
Durch diese Direktive wird zuerst das High-Byte und dann
das Low-Byte generiert. Dieses Verhalten ist auch beim
Start Voreingestellt und wird auch benutzt, wenn weder
SETHL noch SETLH im Quelltext verwendet werden.
1.5.2 Zuweisungsdirektiven
ORG xxxx
Damit wird die Startadresse angegeben, an der das Programm
später liegen soll. Es sind beliebig viele ORG Anweisungen
innerhalb einer Datei möglich. Die Adressen müssen nicht
unbedingt in aufsteigender Reihenfolge sein. d.h.: es kann
eine ORG 2000H - Anweisung vor ORG 1000H stehen.
ROM xxxx
Durch diese Direktive wird die Startadresse des EPROMs an
gegeben und ist nur sinnvoll wenn eine EPROM-Datei erzeugt
werden soll. Wenn also das EPROM später an der Adresse
0C000H liegt, wird hinter der ROM-Direktive diese Adresse
geschrieben. Das Programm muß jedoch nicht unbedingt an
0C000H beginnen, sondern kann genauso auch erst bei z.B.
0CD00H beginnen.
Normalerweise muß man beim Programmieren eines EPROMS die
Startadresse des Programms genau kennen, damit man die
Adresse des Programms an die Adresse des EPROMs anpassen
kann. In diesem Fall darf das Programm nicht von Beginn an
in das EPROM programmiert werden, sondern es muß um 00D00H
Bytes verschoben werden. Das heißt es kommen erst 'leere'
Bytes (im EPROM) und dann kommt das Programm.
Das alles wird durch diese Direktive berücksichtigt! In
der EPROM-Datei stehen nachher (in diesem Beispiel) zu
nächst 00D00H 'leere' Bytes und dann kommt das Programm.
(leere Bereiche zwischen einzelnen Programmteilen werden
ebenfalls auf diese Weise aufgefüllt)
Später beim Programmieren wird diese Datei einfach vom Be-
ginn des EPROMs an eingeladen, die Startadresse des Pro-
gramms ist dann damit bereits richtig berücksichtigt!
EQU oder =
Einem Label wird ein Wert zugewiesen. Dies kann aber pro
Variable nur einmal verwendet werden! (Ansonsten Fehler
meldung: "Label doppelt definiert")
Beispiel:
Start equ 10
Daten = 2*8+3
usw.
DEF
Einem Label wird ein neuer Wert zugewiesen. Die Variable
muß aber bereits durch EQU (bzw "=") eingeführt worden
sein. DEF kann beliebig oft verwendet werden, man sollte
aber vorsichtig damit umgehen, da man damit sehr schnell
logische Fehler in den Quelltext einbauen kann, die sich
nur sehr schwer finden lassen.
Beispiel:
Start equ 10
...
Start def 92
...
DS xx oder DEFS xx
Platz reservieren für xx Bytes. (Bem.: pro DS - Direktive
können allerdings max. nur 255 Bytes reserviert werden.)
DB oder DEFB
Nach dieser Direktive folgen Datenbytes. (8-Bit)
Beispiel:
DB 0,1,2,3,4,5,...
DB 2,"Das ist ein Text",10,'a',10*2,001000B
DW oder DEFW
Nach dieser Direktive folgen Datenwörter. (16-Bit)
Beispiel:
DW 0,1,2,4000,.....
DW 2,"Text",'g',290,2FFFH,...
usw.
1.5.3 Listingdirektiven
NOLIST oder LISTOFF
Da eine Listingdatei bedingt durch z.B.: Includefiles sehr
groß werden kann, kann die Erzeugung des Listings durch
diese Direktive ausgeschaltet werden.
LIST oder LISTON
Hiermit wird die Erzeugung des Listings wieder eingeschal-
tet. Falls das Listing davor nicht ausgeschaltet wurde,
ändert diese Direktive am Ablauf jedoch nichts, da das Li-
sting bereits ausgegeben wird.
1.5.4 Bedingte Assemblierung
IFDEF xxxx
Wenn der Ausdruck hinter IFDEF ungleich Null ist, wird
weiterassembliert, also alle Befehle nach dieser Direktive
ausgeführt bzw. assembliert. Wenn der Ausdruck gleich Null
ist, werden alle Zeilen bis zum ENDIF des Quellcodes über
sprungen.
IFNDEF xxxx
Wenn der Ausdruck hinter IFNDEF gleich Null ist, wird wei-
terassembliert. Falls der Ausdruck jedoch ungleich Null
ist, werden alle Zeilen bis zum ENDIF übersprungen.
ENDIF
Nach jedem IFDEF bzw. IFNDEF sollte ein ENDIF folgen. Oder
genauer gesagt, es sollten genau so viele ENDIF vorhanden
sein wie IFDEF plus IFNDEF im Quelltext vorhanden sind.
Ansonsten kommt es zu einer Fehlermeldung!
Diese Direktiven sind rekursiv. Das heißt: es kann z.B.
eine IFNDEF nach einer IFDEF Anweisung folgen. Sollte die
IFDEF Direktive z.B. bereits ergeben, das nicht weiteras
sembliert wird (Ausdruck gleich Null), dann wird zwar die
IFNDEF Anweisung nicht ausgeführt, aber es sollten in die
sem Fall trotzdem zwei ENDIF-Direktiven folgen.
Beispiel:
definition EQU 1
....
ld a,b ;Quelltext
IFDEF definition
.... ;wieder Quelltext (wird ausgeführt)
IFNDEF definition
ld b,a ;Text wird übersprungen
....
ENDIF ;Ende von 'IFNDEF'
ld c,a ;diese Zeile wird wieder assembliert
ENDIF ;Ende von 'IFDEF'
....
usw.
1.5.5 Makros
Makros sind Zusammenfassungen mehrerer Quelltextzeilen,
die nach ihrer Definition in den Assemblerlauf eingescho-
ben werden. Sie können mit Parametern versehen werden, so
daß Sie immer wiederkehrende Sequenzen von Quellzeilen nur
einmal eingeben müssen, auch wenn diese kleine Unterschie-
de aufweisen. Ein Makro wird aufgerufen, indem sein Name
als 'Befehl' eingegeben wird.
Dadurch kann der Quelltext kürzer und übersichtlicher
gehalten werden. Aber wohlgemerkt, nur der Quelltext wird
kleiner, das Programm selbst wird größer. Der Grund: bei
jedem Makroaufruf wird die komplette Sequenz assembliert,
genauso als wenn Sie die Zeilen dort stehen hätten.
Um ein Makro verwenden zu können, muß es erst einmal defi-
nert werden.
Label MAKRO
Durch diese Direktive ('MAKRO') wird das Makro definiert.
Der Name muß vor dieser Anweisung, am Beginn der Zeile
stehen. Alle folgenden Quelltextzeilen gehören dann zu
diesem Makro und werden jedesmal, wenn der Makroname als
Befehl im Quelltext steht dann assembliert.
Dem Makro können später beim Aufruf maximal 10 Argumente
als Parameter angegeben werden. In den Quelltextzeilen
während der Definition müssen diese Parameter durch eine
Zahl von 0 bis 9 und einem Vorangestellten Backslash ('\')
angegeben werden.
Innerhalb einer Makrodefinition kann nicht mit einer neuen
Makrodefinition begonnen werden. Die Verschachtelung von
diesen Direktiven ist also unzulässig.
ENDM
ENDM beendet dann die aktuelle Makroaufnahme. Das Makro
kann von nun an verwendet werden.
Beispiel:
Text1 MAKRO
DB "Hallo, das ist ein Text",0
ENDM
Init MAKRO ;Makro mit 4 Parametern (0 bis 3)
\3 ld a,\0 ;hinter '\' steht die Parameternummer
ld b,\1
ld c,\2
ENDM
Aufgerufen werden diese Makros dann folgendermaßen:
....
Init 1,h,2,Lab1
call u1prg
Init h,4,0fh,Lab2
call ...
.... ;irgend ein Quelltext
Text1 ;z.B. im Datenbereich
1.6 AREXX - Schnittstelle
Durch eine AREXX-Schnittstelle läßt sich ein Programm so
zusagen 'fernsteuern'. Ein anderes, gerade laufendes Pro
gramm (z.B. ein Editor) kann dann dadurch z.B. die Ein
stellungen vornehmen. (Datei angeben, Assembler starten
usw.)
Damit der Empfänger dieser 'Fernsteuerbefehle' eindeutig
gekennzeichnet ist, wird ein Briefkasten benötigt. Dieser
Briefkasten hat einen eindeutigen Namen und wird Port ge-
nannt.
Der Z80 Crossassembler legt solch einen Port an, nachdem
das Window geöffnet wurde. Das heißt, das der AREXX-Port
erst ab Amiga-OS 2.04 verfügbar ist.
Der Portname hat folgenden Aufbau:
"REXX_Z80_x"
Das x bezeichnet eine Nummer. Beim ersten Start steht dort
eine Null ('0'). Wenn der Assembler nun noch einmal ge-
startet wird, so das zwei Assembler gleichzeitig aktiv
sind, bekommt der als zweiter gestartete Assembler die
Nummer eins ('1') usw..
Insgesamt kennt der Assembler 7 AREXX-Befehle, die Teil
weise noch Parameter haben.
Folgend Befehle werden erkannt:
REQUESTS ON/OFF:
Wenn Fehler im Quelltext sind, erscheint normalerweise ein
Requester ("Fehler im Quellcode..."), der darauf aufmerk
sam macht. Durch diesen Befehl kann der Requester unter
drückt werden (OFF). Oder falls er unterdrückt war, kann
man ihn wieder einschalten (ON).
DATEINAME 'Name':
Dadurch wird der Dateiname übergeben.
START:
Der Assemblerlauf wird gestartet.
BEENDEN:
Der Assembler wird beendet, genauso als wenn im Menü der
Punkt Ende angewählt worden wäre.
Die Ausgabeformate:
ASCII ON/OFF:
ASCII-datei erzeugen.
BINAER ON/OFF:
Binärdatei erzeugen ein- oder ausschalten.
EPROM ON/OFF:
Epromdatei erzeugen ein- oder ausschalten.
LISTING ON/OFF:
Listing und Symboltabelle erzeugen ein- oder ausschalten.
Beispiel für eine Steuerung aus einer Shell:
Zunächst muß der Assembler gestartet werden. Dann kann aus
einer Shell z.B. folgendes Kommando eingegeben werden:
rx "address REXX_Z80_0 DATEINAME XYZ.ASM"
Als Ergebnis sollte jetzt dieser Dateiname im Assembler
sichtbar werden.
Als weitere Beispiele existieren im Verzeichnis die Datei
en: Assemble.rexx und AssOut.rexx. Diese Dateien können
aus dem Editor Ed aufgerufen werden und starten dann den
Assembler (Assemble.rexx) bzw. schalten verschiedene Aus
gabeformate ein und starten dann den Assembler.
1.7 Ausgabeformate
1.7.1 Fehlermeldungen:
In die Datei "Z80Ass.err" (im gleichem Verzeichnis, in dem
der Assembler steht) werden alle Fehlermeldungen geschrie-
ben. In einer Zeile werden alle wichtigen Informationen zu
einem Fehler ausgegeben. Also Datei, Zeile, Fehlernummer
und Fehlerursache als Klartext.
Beispiel:
Z80Lab1.asm: Zeile 6: Error 6: Befehl unbekannt
1.7.2 Listing:
Der Dateiname wird vom Quellfile abgeleitet, jedoch mit
der Endung ".lst". Hier steht noch einmal Zeile für Zeile
der Quelltext, die Zeilennummer und der Maschinencode.
1.7.3 Symboltabelle:
Der Dateiname wird vom Quellfile abgeleitet, jedoch mit
der Endung ".sym". Alle Label und Symbole werden mit den
dazugehörigen Werten aufgelistet. Diese Datei kann dann
z.B. in anderen Programmen wieder durch Include "xxx.sym"
wieder eingeladen werden, wenn diese Symbole mit diesen
Werten dort verwendet werden müssen.
1.7.4 (Hex.) ASCII Datei:
Der Dateiname wird vom Quellfile abgeleitet, jedoch mit
der Endung ".hex". Der Aufbau ist so gehalten, das z.B.
ein Monitorprogramm im Z80-(Einplatinen-)Computer diese
Datei eingeladen werden kann. Vorausgesetzt ein Monitor
programm ist vorhanden und dieses Monitorprogramm kann
dieses Format verarbeiten.
Beispiel:
;0000cd4100.......
;001000c30000.....
Durch ';' wird jede Zeile eingeleitet. Die nächsten 2 By-
tes bezeichnen die Adresse für die darauffolgenden Daten.
Dann folgen die Maschinendaten als Hexadezimale Zahlen
(insgesamt 16 Bytes pro Zeile).
1.7.5 Binäre Datei:
Der Dateiname wird vom Quellfile abgeleitet, jedoch mit
der Endung ".bin". Diese Datei enthält den Maschinencode
und eventuell auch Formatierungsanweisungen.
1.7.6 Eprom Datei:
Der Dateiname wird vom Quellfile abgeleitet, jedoch mit
der Endung ".epr". Diese Datei enthält nur den reinen Ma-
schinencode. Es sind keinerlei Formatierungsanweisungen
oder sonstige Daten vorhanden. Diese Datei kann in ein
EPROM gebrannt werden.
1.8 Fehlermeldungen
Fehlernummer: Bedeutung:
1 Org-Direktive ohne Parameter
(es fehlt die Adresse)
2 EQU-Direktive ohne Parameter
3 EQU-Direktive ohne Label
4 QRG doppelt vorhanden
(Die Adresse existiert zweimal)
5 Falscher Parameter
6 Befehl unbekannt
7 Bereichsüberschreitung bei 1-Byte
Argument
8 Bereichsüberschreitung bei 2-Byte
Argument
10 Parameterübergabe falsch
11 Label doppelt definiert
12 Ausdruck zu lang
(es kann sich dabei eigentlich nur um
eine Formel handeln. Kürzen Sie den
Ausdruck auf max. 25 Zeichen)
13 Zu viele Argumente
14 Ausdruck falsch
15 Division durch NULL
16 Unerlaubtes Zeichen in Formel
17 Kann Variable nicht finden
19 Überlagerung der Binärdaten
Abhilfe: Anpassung der Org-Anweisung,
Beispiel siehe unten
(Bemerkung:
Dieser Fehler wird erst bei der
nächsten ORG Anweisung bemerkt.)
20 Bufferüberlauf bei DS-Direktive
(Es können pro DS Anweisung nur 255
Bytes reserviert werden. Sollen mehr
Bytes reserviert werden müssen
entsprechend viele DS Anweisungen
angegeben werden)
21 Die Adresse, die bei der ROM-Direktive
angegeben wurde, ist höher als die
kleinste Programmadresse. Dadurch kommt
es zu einem Konflikt mit dem Adressbereich
des EPROMS.
22 Es gibt mehr ENDM-Anweisungen als MAKRO-
Anweisungen!
23 Es wird versucht eine Makrodefinition in
einer Makrodefinition zu beginnen.
24 Der Makroname existiert bereits.
25 undefinierter Makroparameter.
Es existiert hinter einem BACKSLASH '\'
innerhalb einer Makrodefinition ein
unzulässiges Zeihen. Es sind nur die
Zeichen '0' bis '9' erlaubt!
Beispiel zum Fehler 19:
Beispiellisting:
org 1000H
db 1,2,3,4,5,6,7,8,9
org 1005H
ld a,...
usw.
org 2000H
ld (Ix+0),10
usw.
Dieses Listing führt zum Fehler 19. Die erste Anweisung
beginnt bei 1000H und belegt 9 Bytes = bis Adresse 1009H
(Tabelle 1 bis 9). Die nächste Org-Anweisung soll aber be-
reits bei 1005H beginnen. Dort steht aber die Tabelle.
(= Überlagerung der Binärdaten)
Bemerkung:
Dieser Fehler wird erst bei nächsten org-Anweisung bemerkt
(bzw. bei Dateiende wenn keine Org-Anweisung mehr folgt)
hier in diesem Beispiel wird dieser Fehler erst in der
Zeile bemerkt, in der org 2000H steht.
2 Z80 Hilfesystem
2.1 Aufruf
Das Programm wurde bei der Installation des Assemblers mit
installiert. Gestartet wird dieses Programm durch Doppel
klick auf das Icon Z80Hilfe. Es lädt dann die Datei
Z80Hilfe.txt, das sich im selben Verzeichnis befinden muß,
und öffnet dann ein Window.
2.2 Funktion
Nachdem das Programm gestartet wurde, wird in einem Window
eine Auswahl angezeigt. Zur Zeit wird zu fast allen
Z80-Befehlen eine kurze Erklärung angezeigt. Dazu muß ein
fach der Titel (Z80-Befehl) angeklickt werden, zu dem man
fragen hat. Dieses Programm soll praktisch ein Nachschla-
gewerk zumindest teilweise ersetzen, um die Z80-Befehle zu
lernen, ist dieses Programm jedoch nicht geeignet!
Wenn man sich die Informationen angesehen hat, kommt man
durch Anklicken von OK wieder zurück zum Hauptmenü.
2.3 Aufbau der Z80Hilfe.txt-Datei
Die Datei wurde durch einen normalen Editor erstellt und
kann auch jederzeit von Ihnen ergänzt oder verbessert wer-
den.
Um die Menüstruktur zu erzeugen existieren vier Befehle.
- \title\
- \subtitle\
- \text\ und
- \newline\
Bemerkung: der Befehle \language\ wird noch nicht unter
stützt, er steht jedoch bereits in der Z80Hilfe.txt-Datei!
Jeder Befehl beginnt IMMER mit einem '\' und endet auch
wieder mit einem '\'. Die Befehle \title\ und \subtitle\
untergliedern den Text wie in einem Buch mit einer
'großen' Überschrift und mit 'kleineren' Überschriften.
Nach diesen beiden Befehlen muß die Überschrift in '{',
'}' eingeschlossen werden.
Der Befehl \text\ steht dann nach einem \title\- oder nach
einem \subtitle\-Befehl. Nach dem \text\-Befehl steht dann
wiederum der Text, der später nach dem Anklicken der Über
schrift angezeigt werden soll. Die Nummerierung, die im
Hauptmenü erscheint, wird automatisch generiert, und
braucht nicht weiter beachtet werden.
Da leere Zeilen ignoriert werden, muß der Befehl \newline\
verwendet werden, wenn eine Leerzeile eingeschoben werden
soll. (Das gilt nur für den Text, und nicht für die Über-
schriften!) Text, Befehle oder irgendwelche sonstigen Zei-
chen nach dem \newline\-Befehl werden nicht beachtet!
Bemerkung:
- In einer Zeile darf maximal nur ein Befehl stehen!
- Die TAB-Taste darf nicht verwendet werden!
Beispiel:
\title\{Das ist ein Test}
\subtitle\{Das ist ein Untertitel}
\text\{Hier könnte jetzt ein beliebiger Text stehen.
\newline\
Nach einer Leerzeile geht der Text hier weiter.}
\title\{Eine neue Überschrift}
\text\{Auch nach 'title' darf ein 'text' stehen!}
usw.
3 Editor
3.1 Aufruf
Durch Doppelklick auf das Icon 'Editor' wird der Editor
gestartet. Es handelt sich dabei jedoch nicht um einen
mitgelieferten Editor, sondern es wird der Ed aufgerufen.
Dieser Editor (Ed) wird mit dem Betriebssystem
(Amiga-OS 2.04) geliefert. Eine genaue Anleitung zu diesem
Editor kann deshalb der Anleitung zum Amiga entnommen wer-
den. (Anleitung zur Workbench und Anleitung:
AmigaDOS->Editoren)
Selbstverständlich kann auch ein anderer (besserer) Editor
verwendet werden.
Bemerkung: Aus Ed können AREXX-Programme aufgerufen wer-
den. Dazu existieren im Verzeichnis Examples zwei AREXX-
Programme: Assemble.rexx und AssOut.rexx. Werden diese
Programme aufgerufen, wird das derzeitig im Editor befind-
liche Programm abgespeichert und wenn der Assembler be-
reits aktiv ist, wird ein Assemblerlauf gestartet.
4 Anhang
4.1 Beispielprogramme
Die Beispielprogramme befinden sich im Verzeichnis Ex-
amples.
Die Datei Test.asm enthält alle Befehle des Z80 und kann
zum Testen des Crossassemblers verwendet werden.
Die Datei TestIO.asm enthält ein Programm, das abwechselnd
die Zahl 00HEX und FFHEX in die Adresse 0 im IO-Bereich
schreibt. Wenn sich auf dieser Adresse eine 8-Bit Ausgabe
mit LEDs befindet, erhält man ein Blinklicht.
Die Datei TestIO2.asm enthält ein Lauflicht. Auch hier
wird auf die Adresse 0 im IO-Bereich zugegriffen.
Bemerkung: Die beiden Programme TestIO.asm und TestIO2.asm
sind für einen Z80-Computer entworfen, der:
1. ein EPROM mit einem Adressbereich von 16 kByte hat.
2. das EPROM nach einem RESET an der Adresse 0 einblendet,
und beim ersten Zugriff auf eine Adresse zwischen
C000Hex und FFFFHex das EPROM dann dauerhaft auf diesen
Adressbereich schaltet.
3. im IO-Bereich, Adresse 0 eine 8-Bit Ausgabe hat.